package carnero.cgeo;
import android.app.Activity;
import android.app.ProgressDialog;
import java.util.ArrayList;
import android.os.Bundle;
import android.view.View;
import android.view.LayoutInflater;
import android.widget.Button;
import android.widget.LinearLayout;
import android.content.Intent;
import android.content.res.Resources;
import android.location.Address;
import android.location.Geocoder;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import java.util.List;
import java.util.Locale;
public class cgeoaddresses extends Activity {
private final ArrayList<Address> addresses = new ArrayList<Address>();
private String keyword = null;
private Activity activity = null;
private cgeoapplication app = null;
private cgSettings settings = null;
private cgBase base = null;
private Resources res = null;
private cgWarning warning = null;
private LayoutInflater inflater = null;
private LinearLayout addList = null;
private ProgressDialog waitDialog = null;
private Handler loadPlacesHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
if (addList == null) {
addList = (LinearLayout) findViewById(R.id.address_list);
}
if (addresses.isEmpty()) {
if (waitDialog != null) {
waitDialog.dismiss();
}
warning.showToast(res.getString(R.string.err_search_address_no_match));
finish();
return;
} else {
LinearLayout oneAddPre = null;
for (Address address : addresses) {
oneAddPre = (LinearLayout) inflater.inflate(R.layout.address_button, null);
Button oneAdd = (Button) oneAddPre.findViewById(R.id.button);
int index = 0;
StringBuilder allAdd = new StringBuilder();
StringBuilder allAddLine = new StringBuilder();
while (address.getAddressLine(index) != null) {
if (allAdd.length() > 0) {
allAdd.append("\n");
}
if (allAddLine.length() > 0) {
allAddLine.append("; ");
}
allAdd.append(address.getAddressLine(index));
allAddLine.append(address.getAddressLine(index));
index++;
}
oneAdd.setText(allAdd.toString());
oneAdd.setLines(allAdd.toString().split("\n").length);
oneAdd.setClickable(true);
oneAdd.setOnClickListener(new buttonListener(address.getLatitude(), address.getLongitude(), allAddLine.toString()));
addList.addView(oneAddPre);
}
}
if (waitDialog != null) {
waitDialog.dismiss();
}
} catch (Exception e) {
if (waitDialog != null) {
waitDialog.dismiss();
}
Log.e(cgSettings.tag, "cgeoaddresses.loadCachesHandler: " + e.toString());
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// init
activity = this;
res = this.getResources();
app = (cgeoapplication) this.getApplication();
settings = new cgSettings(this, getSharedPreferences(cgSettings.preferences, 0));
base = new cgBase(app, settings, getSharedPreferences(cgSettings.preferences, 0));
warning = new cgWarning(this);
inflater = getLayoutInflater();
// set layout
if (settings.skin == 1) {
setTheme(R.style.light);
} else {
setTheme(R.style.dark);
}
setContentView(R.layout.addresses);
base.setTitle(activity, res.getString(R.string.search_address_result));
// google analytics
base.sendAnal(activity, "/addresses");
// get parameters
Bundle extras = getIntent().getExtras();
// try to get data from extras
if (extras != null) {
keyword = extras.getString("keyword");
}
if (keyword == null) {
warning.showToast(res.getString(R.string.err_search_address_forgot));
finish();
return;
}
waitDialog = ProgressDialog.show(this, res.getString(R.string.search_address_started), keyword, true);
waitDialog.setCancelable(true);
(new loadPlaces()).start();
}
@Override
public void onResume() {
super.onResume();
settings.load();
}
@Override
public void onDestroy() {
super.onDestroy();
}
private class loadPlaces extends Thread {
@Override
public void run() {
Geocoder geocoder = new Geocoder(activity, Locale.getDefault());
try {
List<Address> knownLocations = geocoder.getFromLocationName(keyword, 20);
addresses.clear();
for (Address address : knownLocations) {
addresses.add(address);
}
} catch (Exception e) {
Log.e(cgSettings.tag, "cgeoaddresses.loadPlaces.run: " + e.toString());
}
loadPlacesHandler.sendMessage(new Message());
}
}
private class buttonListener implements View.OnClickListener {
private Double latitude = null;
private Double longitude = null;
private String address = null;
public buttonListener(Double latitudeIn, Double longitudeIn, String addressIn) {
latitude = latitudeIn;
longitude = longitudeIn;
address = addressIn;
}
public void onClick(View arg0) {
Intent addressIntent = new Intent(activity, cgeocaches.class);
addressIntent.putExtra("type", "address");
addressIntent.putExtra("latitude", (Double) latitude);
addressIntent.putExtra("longitude", (Double) longitude);
addressIntent.putExtra("address", (String) address);
addressIntent.putExtra("cachetype", settings.cacheType);
activity.startActivity(addressIntent);
finish();
return;
}
}
public void goHome(View view) {
base.goHome(activity);
}
}